home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / TCPDUMP.C < prev    next >
Text File  |  1993-10-14  |  2KB  |  79 lines

  1. #include "global.h"
  2. #include "mbuf.h"
  3. #include "netuser.h"
  4. #include "internet.h"
  5. #include "tcp.h"
  6. #include "ip.h"
  7. #include "trace.h"
  8.  
  9. /* Dump a TCP segment header. Assumed to be in network byte order */
  10. void
  11. tcp_dump(
  12. FILE *fp,
  13. struct mbuf **bpp,
  14. int32 source, int32 dest,        /* IP source and dest addresses */
  15. int check)                        /* 0 if checksum test is to be bypassed */
  16. {
  17.     struct tcp seg;
  18.     struct pseudo_header ph;
  19.     int16 csum = 0, dlen;
  20.  
  21.     if(bpp == NULLBUFP || *bpp == NULLBUF) {
  22.         return;
  23.     }
  24.     /* Verify checksum */
  25.     ph.source = source;
  26.     ph.dest = dest;
  27.     ph.protocol = TCP_PTCL;
  28.     ph.length = len_p(*bpp);
  29.  
  30.     if(check) {
  31.         csum = cksum(&ph,*bpp,ph.length);
  32.     }
  33.     ntohtcp(&seg,bpp);
  34.  
  35.     trprintf(fp,"TCP: %u->%u Seq x%lx",seg.source,seg.dest,seg.seq,seg.ack);
  36.  
  37.     if(seg.flags.ack) {
  38.         trprintf(fp," Ack x%lx",seg.ack);
  39.     }
  40.     if(seg.flags.congest) {
  41.         trprintf(fp," CE");
  42.     }
  43.     if(seg.flags.urg) {
  44.         trprintf(fp," URG");
  45.     }
  46.     if(seg.flags.ack) {
  47.         trprintf(fp," ACK");
  48.     }
  49.     if(seg.flags.psh) {
  50.         trprintf(fp," PSH");
  51.     }
  52.     if(seg.flags.rst) {
  53.         trprintf(fp," RST");
  54.     }
  55.     if(seg.flags.syn) {
  56.         trprintf(fp," SYN");
  57.     }
  58.     if(seg.flags.fin) {
  59.         trprintf(fp," FIN");
  60.     }
  61.     trprintf(fp," Wnd %u",seg.wnd);
  62.  
  63.     if(seg.flags.urg) {
  64.         trprintf(fp," UP x%x",seg.up);
  65.     }
  66.     /* Print options, if any */
  67.     if(seg.mss) {
  68.         trprintf(fp," MSS %u",seg.mss);
  69.     }
  70.     if((dlen = len_p(*bpp)) > 0) {
  71.         trprintf(fp," Data %u",dlen);
  72.     }
  73.     if(csum) {
  74.         trprintf(fp," CHECKSUM ERROR (%u)",csum);
  75.     }
  76.     trprintf(fp,"\n");
  77. }
  78.  
  79.